module TestÁrbol23 where

import Árbol23
import Test.HUnit

import Char
--Para hacer más sencillo
runTestsÁrbol23 = runTestTT allTestÁrbol23

--TESTS
--Test hojas
testHojas1 = TestCase (assertEqual "Para Arbol una hoja," 
	['a'] (hojas arbolUnaHoja) )
testHojas2 = TestCase (assertEqual "Para Arbol Dos un nivel," 
	"ab" (hojas arbol1) )
testHojas3 = TestCase (assertEqual "Para Arbol Dos dos niveles," 
	"abcd" (hojas arbol2) )
testHojas4 = TestCase (assertEqual "Para Arbol Dos desbalanceado," 
	"abc" (hojas arbol3) )
testHojas5 = TestCase (assertEqual "Para Arbol Tres un nivel," 
	"abc" (hojas arbol4) )
testHojas6 = TestCase (assertEqual "Para Arbol Tres dos niveles," 
	"hola chau" (hojas arbol5) )
testHojas7 = TestCase (assertEqual "Para Arbol Tres desbalanceado," 
	"hola!" (hojas arbol6) )
testHojas8 = TestCase (assertEqual "Para Arbol Dos Tres," 
	"ganar" (hojas arbol7) )
testHojas9 = TestCase (assertEqual "Para Arbol Dos Tres," 
	"argan" (hojas arbol8) )
testHojas10 = TestCase (assertEqual "Para Arbol Tres Dos," 
	"haskell!" (hojas arbol9) )
testHojas11 = TestCase (assertEqual "Arbolito1," 
	"abcdefghi" (hojas arbolito1) ) --Ver def arbolito1 en Árbol23.hs
testHojas12 = TestCase (assertEqual "Arbolito2," 
	[-1,0,-2,4] (hojas arbolito2) ) --Ver def arbolito2 en Árbol23.hs


--Test esHoja
testEsHoja1 = TestCase (assertEqual "Para Arbol una hoja," 
	True (esHoja arbolUnaHoja) )
testEsHoja2 = TestCase (assertEqual "Para Arbol No hoja," 
	False (esHoja arbol1) )
testEsHoja3 = TestCase (assertEqual "Para Arbol No hoja," 
	False (esHoja arbol5) )
testEsHoja4 = TestCase (assertEqual "Para Arbol No hoja," 
	False (esHoja arbol8) )
	

--Test internos
--testInternos1 = TestCase (assertEqual "Para Arbol una hoja," 
	--[] (internos arbolUnaHoja) )
testInternos2 = TestCase (assertEqual "Para Arbol No hoja," 
	[1] (internos arbol1) )
testInternos3 = TestCase (assertEqual "Para Arbol No hoja," 
	[1,2,3] (internos arbol2) )	
testInternos4 = TestCase (assertEqual "Para Arbol No hoja," 
	[1,2] (internos arbol3) )	
testInternos5 = TestCase (assertEqual "Para Arbol No hoja," 
	[1,2] (internos arbol4) )	
testInternos6 = TestCase (assertEqual "Para Arbol No hoja," 
	[1,3,4,8,5,2,6,7] (internos arbol5) )
testInternos7 = TestCase (assertEqual "Arbolito1," 
	[0,1,2,3,4,5,6,7] (internos arbolito1) ) --Ver def arbolito1 en Árbol23.hs
testInternos8 = TestCase (assertEqual "Arbolito2," 
	[True,False,True] (internos arbolito2) ) --Ver def arbolito2 en Árbol23.hs
testInternos9 = TestCase (assertEqual "Arbol 5 niveles," 
	[1,6,7,5,8,10,11,9] (internos arbol10) )


--Test evaluar
testEvaluar1 = TestCase (assertEqual "Arbol 1," 3 (evaluar arbol11) )
testEvaluar2 = TestCase (assertEqual "Arbol 2," 10 (evaluar arbol12) )
testEvaluar3 = TestCase (assertEqual "Arbol 3," (-34) (evaluar arbol13) )
testEvaluar4 = TestCase (assertEqual "Arbol 4," 14 (evaluar arbol14) )
	
--DECLARACION DE SUITs
--Hacemos una suit con los casos de test de hojas
testHojas = TestList [
	TestLabel "TestHojas1" testHojas1,
	TestLabel "TestHojas2" testHojas2,
	TestLabel "TestHojas3" testHojas3,
	TestLabel "TestHojas4" testHojas4,
	TestLabel "TestHojas5" testHojas5,
	TestLabel "TestHojas6" testHojas6,
	TestLabel "TestHojas7" testHojas7,
	TestLabel "TestHojas8" testHojas8,
	TestLabel "TestHojas9" testHojas9,
	TestLabel "TestHojas10" testHojas10,
	TestLabel "TestHojas11" testHojas11,
	TestLabel "TestHojas12" testHojas12]

--Hacemos una suit con los casos de test de esHoja
testEsHoja = TestList [
	TestLabel "TestEsHoja1" testEsHoja1,
	TestLabel "TestEsHoja2" testEsHoja2,
	TestLabel "TestEsHoja3" testEsHoja3,
	TestLabel "TestEsHoja4" testEsHoja4]

--Hacemos una suit con los casos de test de internos
testInternos = TestList [
	TestLabel "TestInternos2" testInternos2,
	TestLabel "TestInternos3" testInternos3,
	TestLabel "TestInternos4" testInternos4,
	TestLabel "TestInternos5" testInternos5,
	TestLabel "TestInternos6" testInternos6,
	TestLabel "TestInternos7" testInternos7,
	TestLabel "TestInternos8" testInternos8,
	TestLabel "TestInternos9" testInternos9]	

--Hacemos una suit con los casos de test de evaluar
testEvaluar = TestList [
	TestLabel "TestEvaluar1" testEvaluar1,
	TestLabel "TestEvaluar2" testEvaluar2,
	TestLabel "TestEvaluar3" testEvaluar3,
	TestLabel "TestEvaluar4" testEvaluar4]	
	
--Armamos una "suit" con los test de Árbol23
allTestÁrbol23 = TestList [
	TestLabel "TestHojas" testHojas,
	TestLabel "TestEsHoja" testEsHoja,
	TestLabel "TestInternos" testInternos,
	TestLabel "TestEvaluar" testEvaluar]
	
------ARBOLES---------------
arbolUnaHoja = Hoja 'a'
arbol1 = Dos 1 
			(Hoja 'a') 
			(Hoja 'b')
arbol2 = Dos 1 
			(Dos 2 
				(Hoja 'a') 
				(Hoja 'b')) 
			(Dos 3 
				(Hoja 'c') 
				(Hoja 'd'))
arbol3 = Dos 1 
			(Hoja 'a') 
			(Dos 2 
				(Hoja 'b') 
				(Hoja 'c'))
arbol4 = Tres 1 2
			(Hoja 'a')
			(Hoja 'b')
			(Hoja 'c')
arbol5 = Tres 1 3
			(Tres 4 8
				(Hoja 'h')
				(Hoja 'o')
				(Hoja 'l'))
			(Tres 5 2
				(Hoja 'a')
				(Hoja ' ')
				(Hoja 'c'))
			(Tres 6 7
				(Hoja 'h')
				(Hoja 'a')
				(Hoja 'u'))
arbol6 = Tres 1 3
			(Hoja 'h')
			(Tres 5 2
				(Hoja 'o')
				(Hoja 'l')
				(Hoja 'a'))
			(Hoja '!')
arbol7 = Dos 1
			(Tres 5 6
				(Hoja 'g')
				(Hoja 'a')
				(Hoja 'n'))
			(Dos 2
				(Hoja 'a')
				(Hoja 'r'))
arbol8 = Dos 1			
			(Dos 2
				(Hoja 'a')
				(Hoja 'r'))
			(Tres 5 6
				(Hoja 'g')
				(Hoja 'a')
				(Hoja 'n'))
arbol9 = Tres 1 3
			(Hoja 'h')
			(Dos 4
				(Tres 5 7
					(Hoja 'a')
					(Hoja 's')
					(Hoja 'k'))
				(Tres 8 10
					(Hoja 'e')
					(Hoja 'l')
					(Hoja 'l')))
			(Hoja '!')
arbol10 = Dos 1
			(Hoja 'a')
			(Tres 6 7
				(Dos 5
					(Hoja 'b')
					(Hoja 'c'))
				(Dos 8
					(Dos 10
						(Hoja 'd')
						(Hoja 'e'))
					(Dos 11
						(Hoja 'f')
						(Hoja 'p')))
				(Dos 9
					(Hoja 'g')
					(Hoja 'h')))
arbol11 = Dos (+)
			(Hoja 1)
			(Hoja 2)
arbol12 = Dos (+)
			(Dos (*)
				(Hoja 3)
				(Hoja 2))
			(Hoja 4)
arbol13 = Dos (+)
			(Dos (*)
				(Hoja 3)
				(Hoja 2))
			(Tres (-) (*)
				(Hoja 5)
				(Hoja 10)
				(Hoja 8))
arbol14 = Tres (*) (+)
			(Hoja 3)
			(Hoja 4)
			(Hoja 2)

arbolPLP = Dos 'p'
			(Dos 'l'
				(Dos 'g' 
					(Hoja 5)
					(Hoja 2))
				(Tres 'r' 'a' 
					(Hoja 0)
					(Hoja 1)
					(Hoja 12)))
			(Dos 'p'
				(Tres 'n' 'd' 
					(Hoja (-3))
					(Hoja 4)
					(Hoja 9))
				(Dos 'e' 
					(Hoja 20)
					(Hoja 7)))


